
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
namespace Iridium
{
	public class ggConst
	{
		public const string version_8 = "8.0.0.7669";
		public const string version_10 = "10.0.0.10450";
		public const string version_8_str = "Gadu-Gadu Client build 8.0.0.7669";
		public const string version_10_str = "Gadu-Gadu Client build 10.0.0.10450";
		public const int use_version = 10;
		public const int use_file = 10;
	}
	//HASH DOPELNIAMY vbNullChar
	//dodac flagi klienta/czyli obsluga tego/tamtego..
	public enum ggPacketTypes_Receive : int
	{
		//nic/pusty
		gg_none = 0x0,
		//początek - logowanie
		gg_welcome = 0x1,
		gg_login80_ok = 0x35,
		gg_login80_failed = 0x43,
		//odpowiedz na gg_notify
		gg_notify_reply80 = 0x37,
		//zmiana statusu/takie same jak notify_reply80
		gg_status80 = 0x36,
		//dane specjalne usera/az 3 struktury/tylko przy ustawionej odpowiedniej masce bitowej
		gg_user_data = 0x44,
		//potwierdzenie odbioru do wysylajacgo (przy wysylaniu wiadomosci)
		gg_send_msg_ack = 0x5,
		//odbior wiadomosci
		gg_recv_msg80 = 0x2e,
		// Czas nadania jest zapisany w postaci UTC, jako ilości sekund od 1 stycznia 1970r.
		//multilogowanie
		gg_recv_own_msg = 0x5a,
		//wyslana wiadomosc z naszego numeru jak gg_recv_msg80
		gg_multilogon_info = 0x5b,
		//informacje o innych klientach
		//pisak
		gg_typing_notify = 0x59,
		//ping pong
		gg_pong = 0x7,
		// to jest odpowiedzia/nie trzeba odbierac/zmienia sie z wersji na wersje

		gg_disconnecting = 0xb,
		// Ma to miejsce, gdy próbowano zbyt wiele razy połączyć się z nieprawidłowym hasłem (wtedy pakiet zostanie wysłany w odpowiedzi na GG_LOGIN70), lub gdy równocześnie połączy się drugi klient z tym samym numerem (nowe połączenie ma wyższy priorytet).

		//wiad systemowe i eventy
		gg_xml_event = 0x27,
		//wiad systemowa 1.12
		gg_xml_action = 0x2c
		//wiad event 1.13
	}
	public enum ggPacketTypes_Send : int
	{
		//nic/pusty
		gg_none = 0x0,
		//logowanie
		gg_login80 = 0x31,
		//zmiana statusu
		gg_new_status80 = 0x38,
		//lista kontaktow/wszystkie wpisy, oprocz ostatniego, gg_notify_first/liste dzielimy po 400 kontatkow
		gg_notify_first = 0xf,
		gg_notify_last = 0x10,
		//pusta lista :( wysylamy pusty pakiet (z naglowkiem, oczywiscie)
		gg_notify_empty = 0x12,
		//dodanie/usuniecie w trakcie polaczenia/ mozna za pomoca ich usuwac maski bitowe
		gg_add_notify = 0xd,
		gg_remove_notify = 0xe,
		//wysylanie wiadomosci + wiadomosci konferencyjne
		gg_send_msg80 = 0x2d,
		//potwierdzenie odbioru do wysylajacego ( przy odbieraniu wiadomosci)
		//Jeśli podczas logowania klient wyśle w polu features maskę bitową 0x00000400, to zobowiązuje się wysłać potwierdzenie po każdej odebranej wiadomości. Wysyła je w postaci pakietu:
		gg_recv_msg_ack = 0x46,
		//pisak
		gg_typing_notify = 0x59,

		//multilogowanie
		gg_multilogon_disconnect = 0x62,
		// rozlaczenie innego klienta (my go rozlaczamy)

		//ping pong co 5 minut (najlepiej co 4 :D)
		gg_ping = 0x8
		// to sie wysyla



		//katalog publiczny/wyszukiwarka ze strony
		//http://dev.gg.pl/api/pages/ggapi.html - ciekawy opis ggLive, katalogu publicznego

		//eksport, lista kontaktow 1.15



	}
	public enum ggFeatures : int
	{
		BETA80 = 0x1,
		//Rodzaj pakietu informującego o zmianie stanu kontaktów (patrz bit 2)
		//0 — GG_STATUS77, GG_NOTIFY_REPLY77
		//1 — GG_STATUS80BETA, GG_NOTIFY_REPLY80BETA
		MSG80 = 0x2,
		//Rodzaj pakietu z otrzymają wiadomością
		//0 — GG_RECV_MSG
		//1 — GG_RECV_MSG80
		NOBETA80 = 0x4,
		//Rodzaj pakietu informującego o zmianie stanu kontaktów (patrz bit 0)
		//0 — wybrany przez bit 0
		//1 — GG_STATUS80, GG_NOTIFY_REPLY80
		NEWSTATES = 0x10,
		//Klient obsługuje statusy "nie przeszkadzać" i "poGGadaj ze mną"
		GRAPHICS = 0x20,
		//Klient obsługuje statusy graficzne i GG_STATUS_DESCR_MASK (patrz Zmiana stanu)
		LOGIN80 = 0x40,
		//Znaczenie nie jest znane, ale klient otrzyma w przypadku błędnego hasła pakiet GG_LOGIN80_FAILED zamiast GG_LOGIN_FAILED
		NEWCLIENTS = 0x100,
		//Znaczenie nie jest znane, ale jest używane przez nowe klienty
		ATRIBUTES = 0x200,
		//Klient obsługuje dodatkowe informacje o liście kontaktów
		ACK = 0x400,
		//Klient wysyła potwierdzenia odebrania wiadomości
		NOTIFY = 0x2000,
		//Klient obsługuje powiadomienia o pisaniu
		MULTILOGON = 0x4000
		//Klient 	obsługuje multilogowanie
	}
	public enum ggTyping : int
	{
		GG_TYPING_NOTIFY_TYPE_START = 0x1,
		//rozpoczęte pisanie
		GG_TYPING_NOTIFY_TYPE_STOP = 0x0
		//pozbycie sie wiadomosci (usuniecie, wyslanie)
		//inne wartosci - dlugosc wiadomosci

	}
	public enum ggStates : int
	{
		GG_STATUS_NOT_AVAIL = 0x1,
		//Niedostępny
		GG_STATUS_NOT_AVAIL_DESCR = 0x15,
		//Niedostępny (z opisem)
		GG_STATUS_FFC = 0x17,
		//PoGGadaj ze mną
		GG_STATUS_FFC_DESCR = 0x18,
		//PoGGadaj ze mną (z opisem)
		GG_STATUS_AVAIL = 0x2,
		//Dostępny
		GG_STATUS_AVAIL_DESCR = 0x4,
		//Dostępny (z opisem)
		GG_STATUS_BUSY = 0x3,
		//Zajęty
		GG_STATUS_BUSY_DESCR = 0x5,
		//Zajęty (z opisem)
		GG_STATUS_DND = 0x21,
		//Nie przeszkadzać
		GG_STATUS_DND_DESCR = 0x22,
		//Nie przeszkadzać (z opisem)
		GG_STATUS_INVISIBLE = 0x14,
		//Niewidoczny
		GG_STATUS_INVISIBLE_DESCR = 0x16,
		//Niewidoczny (z opisem)
		GG_STATUS_BLOCKED = 0x6,
		//Zablokowany
		GG_STATUS_IMAGE_MASK = 0x100,
		//Maska bitowa oznaczająca ustawiony opis graficzny (tylko odbierane)
		GG_STATUS_ADAPT_STATUS_MASK = 0x400,
		//Maska bitowa informująca serwer, że jeśli istnieje już inne połączenie na tym numerze to nasze ma przyjać jego stan (podany przez nas zostanie zignorowany). Jeśli połączenia innego nie ma, to ustawiany jest stan podany przez nas.
		GG_STATUS_DESCR_MASK = 0x4000,
		//Maska bitowa oznaczająca ustawiony opis
		GG_STATUS_FRIENDS_MASK = 0x8000
		//Maska bitowa oznaczająca tryb tylko dla przyjaciół
	}
	public enum ggMessage_Class : int
	{
		GG_CLASS_QUEUED = 0x1,
		//Bit ustawiany wyłącznie przy odbiorze wiadomości, gdy wiadomość została wcześniej zakolejkowania z powodu nieobecności
		GG_CLASS_MSG = 0x4,
		//Wiadomość ma się pojawić w osobnym okienku (nieużywane)
		GG_CLASS_CHAT = 0x8,
		//Wiadomość jest częścią toczącej się rozmowy i zostanie wyświetlona w istniejącym okienku
		GG_CLASS_CTCP = 0x10,
		//Wiadomość jest przeznaczona dla klienta Gadu-Gadu i nie powinna być wyświetlona użytkownikowi (nieużywane)
		GG_CLASS_ACK = 0x20
		//Klient nie życzy sobie potwierdzenia wiadomości
	}
	public enum ggMessage_Format : int
	{
		GG_FONT_BOLD = 0x1,
		//Pogrubiony tekst
		GG_FONT_ITALIC = 0x2,
		//Kursywa
		GG_FONT_UNDERLINE = 0x4,
		//Podkreślenie
		GG_FONT_COLOR = 0x8,
		//Kolorowy tekst. Tylko w tym wypadku struktura gg_msg_richtext_format zawiera pole rgb[] będące opisem trzech składowych koloru, kolejno czerwonej, zielonej i niebieskiej.
		GG_FONT_IMAGE = 0x80
		//Obrazek. Tylko w tym wypadku struktura gg_msg_richtext_format zawiera pole image.
	}
	public enum ggMessage_AckType : int
	{
		GG_ACK_BLOCKED = 0x1,
		//Wiadomości nie przesłano (zdarza się przy wiadomościach zawierających adresy internetowe blokowanych przez serwer GG gdy odbiorca nie ma nas na liście)
		GG_ACK_DELIVERED = 0x2,
		//Wiadomość dostarczono
		GG_ACK_QUEUED = 0x3,
		//Wiadomość zakolejkowano
		GG_ACK_MBOXFULL = 0x4,
		//Wiadomości nie dostarczono. Skrzynka odbiorcza na serwerze jest pełna (20 wiadomości maks). Występuje tylko w trybie offline
		GG_ACK_NOT_DELIVERED = 0x6
		//Wiadomości nie dostarczono. Odpowiedź ta występuje tylko w przypadku wiadomości klasy GG_CLASS_CTCP
	}
	public enum ggNotify_stare : int
	{
		GG_USER_OFFLINE = 0x1,
		//Użytkownik, dla którego będziemy niedostępni, ale mamy go w liście kontaktów
		GG_USER_NORMAL = 0x3,
		//Zwykły użytkownik dodany do listy kontaktów
		GG_USER_BLOCKED = 0x4
		//Użytkownik, którego wiadomości nie chcemy otrzymywać
	}
	public enum ggNotify_nowe : int
	{
		GG_USER_BUDDY = 0x1,
		//Każdy użytkownik dodany do listy kontaktów
		GG_USER_FRIEND = 0x2,
		//Użytkownik, dla którego jesteśmy widoczni w trybie „tylko dla przyjaciół”
		GG_USER_BLOCKED = 0x4
		//Użytkownik, którego wiadomości nie chcemy otrzymywać

	}
	public enum ggFlags : int
	{
		Audio = 0x1,
		//Prawdopodobnie połączenia audio
		Video = 0x2,
		//Klient obsługuje wideorozmowy
		Mobile = 0x100000,
		//Klient mobilny (ikona telefonu komórkowego)
		Links = 0x800000
		//Klient chce otrzymywać linki od nieznajomych
	}
}